# Importar paquetes
import matplotlib.pyplot as plt
import datetime
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
from fbprophet import Prophet
import warnings
warnings.filterwarnings('ignore')
import seaborn as sns
!pip install plotly
import plotly.express as px
import plotly.graph_objects as go
from plotly.subplots import make_subplots
import datetime as dt
from datetime import timedelta
from sklearn.model_selection import GridSearchCV
from sklearn.preprocessing import StandardScaler
from sklearn.cluster import KMeans
from sklearn.metrics import silhouette_score,silhouette_samples
from sklearn.linear_model import LinearRegression,Ridge,Lasso
from sklearn.svm import SVR
from sklearn.metrics import mean_squared_error,r2_score
from sklearn.preprocessing import PolynomialFeatures
import statsmodels.api as sm
from statsmodels.tsa.api import Holt,SimpleExpSmoothing,ExponentialSmoothing
from statsmodels.tsa.stattools import adfuller
std=StandardScaler()
from pmdarima.arima import auto_arima
pd.set_option('display.float_format', lambda x: '%.6f' % x)
dfCovid = pd.read_csv('https://www.datos.gov.co/api/views/gt2j-8ykr/rows.csv')
dfCovid.head(10)
# Modificar el tipo de datos para las variables de fechas.
dfCovid['Fecha de notificación']= pd.to_datetime(dfCovid['Fecha de notificación'])
dfCovid[ 'Fecha de muerte']= pd.to_datetime(dfCovid['Fecha de muerte'])
dfCovid['Fecha diagnostico']= pd.to_datetime(dfCovid['Fecha diagnostico'])
dfCovid['Fecha recuperado']= pd.to_datetime(dfCovid['Fecha recuperado'])
dfCovid['fecha reporte web']= pd.to_datetime(dfCovid['fecha reporte web'])
# Limpieza de los resultados para el atributo atención.
dfCovid['atención'].unique()
dfCovid['atención']= dfCovid['atención'].replace({'CASA':'Casa'})
dfCovid['atención']= dfCovid['atención'].fillna('No especifica')
fechas= sorted(pd.concat([dfCovid['Fecha de notificación'],dfCovid['Fecha diagnostico'],dfCovid['Fecha de muerte'],dfCovid['Fecha recuperado'],dfCovid['fecha reporte web']]).unique())
fechas=np.arange(min(fechas),max(fechas),np.timedelta64(86400000000000,'ns'))
dfCovid_Nuevo=pd.DataFrame({'Fecha':fechas})
dfCovid_Nuevo['Muertos']=np.zeros(len(dfCovid_Nuevo))
dfCovid_Nuevo['Confirmados']=np.zeros(len(dfCovid_Nuevo))
dfCovid_Nuevo['Recuperados']=np.zeros(len(dfCovid_Nuevo))
dfCovid_Nuevo
# Se filtra por la ciudad de interés
nombre='Cartagena de Indias'
x=dfCovid[dfCovid['Ciudad de ubicación']==nombre].sort_values(by='Fecha de muerte',ascending=False)
x=x[['ID de caso','atención','fecha reporte web','Fecha de muerte','Fecha de notificación','Fecha diagnostico','Fecha recuperado']]
x
# Se construye el Data Set Covid-19
#Conteo de muertos
m=x[x['atención']=='Fallecido'].groupby('Fecha de muerte').count()
m=pd.DataFrame({'Fecha':m.index.values,'Muertos':[n for n in m.values[:,0]]})
#Conteo de Confirmados
c=x.groupby('Fecha de notificación').count()
c=pd.DataFrame({'Fecha':c.index.values,'Confirmados':[n for n in c.values[:,0]]})
#Conteo Recuperados
r=x.groupby('Fecha recuperado').count()
r=pd.DataFrame({'Fecha':r.index.values,'Recuperados':[n for n in r.values[:,0]]})
df_Nuevo=pd.concat([dfCovid_Nuevo,c,m,r])
df_Nuevo.sort_values(by='Fecha',ascending=True)
df_Nuevo=df_Nuevo.groupby('Fecha').sum().sort_values(by='Fecha',ascending=True)
def acum(df,Col):
m=df[Col].values
d=0
L=[]
for n in m:
d=d+n
L.append(d)
return L
df_Nuevo['Acum_muertos']=acum(df_Nuevo,'Muertos')
df_Nuevo['Acum_confirmados']=acum(df_Nuevo,'Confirmados')
df_Nuevo['Acum_Recuperados']=acum(df_Nuevo,'Recuperados')
df_Nuevo['Acum_Activos']=df_Nuevo['Acum_confirmados']-df_Nuevo['Acum_Recuperados']-df_Nuevo['Acum_muertos']
df_Nuevo
ANÁLISIS EXPLORATORIO DE DATOS
print("Estructura del dataset: ",df_Nuevo.shape)
print("Variables con valores nulos",df_Nuevo.isnull().sum())
print("Tipo de variables del dataset",df_Nuevo.dtypes)
print("Información Básica")
df_Nuevo.iloc(0)[-1]
fig=px.bar(x=df_Nuevo.index,y=df_Nuevo["Acum_Activos"])
fig.update_layout(title="Distribución del número de casos activos en Cartagena ",
xaxis_title="Fecha",yaxis_title="Número de casos en Cartagena",)
fig.show()
fig=px.bar(x=df_Nuevo.index,y=df_Nuevo["Acum_Recuperados"]+df_Nuevo["Acum_muertos"])
fig.update_layout(title="Distribución del número de casos cerrados en Cartagena",
xaxis_title="Fecha",yaxis_title="Número de casos en Cartagena")
fig.show()
df_Nuevo["WeekOfYear"]=df_Nuevo.index.weekofyear
week_num=[]
weekwise_confirmed=[]
weekwise_recovered=[]
weekwise_deaths=[]
weekwise_active=[]
w=1
for i in list(df_Nuevo["WeekOfYear"].unique()):
weekwise_confirmed.append(df_Nuevo[df_Nuevo["WeekOfYear"]==i]["Acum_confirmados"].iloc[-1])
weekwise_recovered.append(df_Nuevo[df_Nuevo["WeekOfYear"]==i]["Acum_Recuperados"].iloc[-1])
weekwise_deaths.append(df_Nuevo[df_Nuevo["WeekOfYear"]==i]["Acum_muertos"].iloc[-1])
weekwise_active.append(df_Nuevo[df_Nuevo["WeekOfYear"]==i]["Acum_Activos"].iloc[-1])
week_num.append(w)
w=w+1
fig=go.Figure()
fig.add_trace(go.Scatter(x=week_num, y=weekwise_confirmed,
mode='lines+markers',
name='Crecimiento semanal de los casos confirmados'))
fig.add_trace(go.Scatter(x=week_num, y=weekwise_recovered,
mode='lines+markers',
name='Crecimiento semanal de los casos recuperados'))
fig.add_trace(go.Scatter(x=week_num, y=weekwise_deaths,
mode='lines+markers',
name='Crecimiento semanal de los casos de muerte'))
fig.add_trace(go.Scatter(x=week_num, y=weekwise_active,
mode='lines+markers',
name='Crecimiento semanal de los casos Activos'))
fig.update_layout(title="Crecimiento semanal de diferentes tipos de casos en Cartagena",
xaxis_title="Número de semanas",yaxis_title="Número de casos",legend=dict(x=0,y=1,traceorder="normal"))
fig.show()
fig, (ax1,ax2) = plt.subplots(1, 2,figsize=(15,5))
sns.barplot(x=week_num,y=pd.Series(weekwise_confirmed).diff().fillna(0),ax=ax1)
sns.barplot(x=week_num,y=pd.Series(weekwise_deaths).diff().fillna(0),ax=ax2)
ax1.set_xlabel("Número de semanas")
ax2.set_xlabel("Número de semanas")
ax1.set_ylabel("Número de casos confirmados")
ax2.set_ylabel("Número de casos de fallecidos")
ax1.set_title("Aumento semanal del número de casos confirmados en Cartagena")
ax2.set_title("Aumento semanal del número de casos de muerte en Cartagena")
fig=go.Figure()
fig.add_trace(go.Scatter(x=df_Nuevo.index, y=df_Nuevo["Acum_confirmados"],
mode='lines+markers',
name='Casos confirmados'))
fig.add_trace(go.Scatter(x=df_Nuevo.index, y=df_Nuevo["Acum_Recuperados"],
mode='lines+markers',
name='Casos Recuperados'))
fig.add_trace(go.Scatter(x=df_Nuevo.index, y=df_Nuevo["Acum_muertos"],
mode='lines+markers',
name='Casos de muertes'))
fig.add_trace(go.Scatter(x=df_Nuevo.index, y=df_Nuevo["Acum_Activos"],
mode='lines+markers',
name='Casos Activos'))
fig.update_layout(title="Crecimiento de los diferentes tipos de casos en Cartagena",
xaxis_title="Fecha",yaxis_title="Número de casos",legend=dict(x=0,y=1,traceorder="normal"))
fig.show()
df_Nuevo["Tasa de mortalidad"]=(df_Nuevo["Acum_muertos"]/df_Nuevo["Acum_confirmados"])*100
df_Nuevo["Tasa de Recuperacion"]=(df_Nuevo["Acum_Recuperados"]/df_Nuevo["Acum_confirmados"])*100
df_Nuevo["Casos Cerrados"]=df_Nuevo["Acum_Recuperados"]+df_Nuevo["Acum_muertos"]
print("Tasa de mortalidad media",df_Nuevo["Tasa de mortalidad"].mean())
print("Tasa de mortalidad media",df_Nuevo["Tasa de mortalidad"].median())
print("Promedio de la tasa de recuperación",df_Nuevo["Tasa de Recuperacion"].mean())
print("Tasa de recuperación media",df_Nuevo["Tasa de Recuperacion"].median())
#Plotting Mortality and Recovery Rate
fig = make_subplots(rows=2, cols=1,
subplot_titles=("Tasa de Recuperacion", "Tasa de mortalidad"))
fig.add_trace(
go.Scatter(x=df_Nuevo.index, y=(df_Nuevo["Acum_Recuperados"]/df_Nuevo["Acum_confirmados"])*100,name="Tasa de Recuperacion"),
row=1, col=1
)
fig.add_trace(
go.Scatter(x=df_Nuevo.index, y=(df_Nuevo["Acum_muertos"]/df_Nuevo["Acum_confirmados"])*100,name="Tasa de mortalidad"),
row=2, col=1
)
fig.update_layout(height=1000,legend=dict(x=-0.1,y=1.2,traceorder="normal"))
fig.update_xaxes(title_text="Fecha", row=1, col=1)
fig.update_yaxes(title_text="Tasa de Recuperacion en Cartagena", row=1, col=1)
fig.update_xaxes(title_text="Fecha", row=1, col=2)
fig.update_yaxes(title_text="Tasa de mortalidad en Cartagena", row=1, col=2)
fig.show()
print("Aumento medio del número de casos confirmados cada día en Cartagena: ",np.round(df_Nuevo["Acum_confirmados"].diff().fillna(0).mean()))
print("Aumento medio del número de casos recuperados cada día en Cartagena: ",np.round(df_Nuevo["Acum_Recuperados"].diff().fillna(0).mean()))
print("Aumento promedio del número de casos de muerte cada día en Cartagena: ",np.round(df_Nuevo["Acum_muertos"].diff().fillna(0).mean()))
print("Aumento promedio del número de casos de activos cada día en Cartagena: ",np.round(df_Nuevo["Acum_Activos"].diff().fillna(0).mean()))
fig=go.Figure()
fig.add_trace(go.Scatter(x=df_Nuevo.index, y=df_Nuevo["Acum_confirmados"].diff().fillna(0),mode='lines+markers',
name='Casos de confirmados'))
fig.add_trace(go.Scatter(x=df_Nuevo.index, y=df_Nuevo["Acum_Recuperados"].diff().fillna(0),mode='lines+markers',
name='Casos de recuperados'))
fig.add_trace(go.Scatter(x=df_Nuevo.index, y=df_Nuevo["Acum_muertos"].diff().fillna(0),mode='lines+markers',
name='Casos de Muerte'))
fig.add_trace(go.Scatter(x=df_Nuevo.index, y=df_Nuevo["Acum_Activos"].diff().fillna(0),mode='lines+markers',
name='Casos Activos'))
fig.update_layout(title="Aumento diario de los diferentes tipos de casos en Cartagena",
xaxis_title="Fecha",yaxis_title="Número de casos",legend=dict(x=0,y=1,traceorder="normal"))
fig.show()
fig=go.Figure()
fig.add_trace(go.Scatter(x=df_Nuevo.index, y=df_Nuevo["Acum_confirmados"].diff().rolling(window=7).mean(),mode='lines+markers',
name='Casos Confirmados'))
fig.add_trace(go.Scatter(x=df_Nuevo.index, y=df_Nuevo["Acum_Recuperados"].diff().rolling(window=7).mean(),mode='lines+markers',
name='Casos Recuperados'))
fig.add_trace(go.Scatter(x=df_Nuevo.index, y=df_Nuevo["Acum_muertos"].diff().rolling(window=7).mean(),mode='lines+markers',
name='Casos Fallecidos'))
fig.add_trace(go.Scatter(x=df_Nuevo.index, y=df_Nuevo["Acum_Activos"].diff().rolling(window=7).mean(),mode='lines+markers',
name='Casos Activos'))
fig.update_layout(title="Media móvil por cada 7 días de los casos confirmados, recuperados y de muerte en Cartagena",
xaxis_title="Fecha",yaxis_title="Número de casos",legend=dict(x=0,y=1,traceorder="normal"))
fig.show()
print("Promedio de crecimiento medio del número de casos confirmados en Cartagena: ",(df_Nuevo["Acum_confirmados"]/df_Nuevo["Acum_confirmados"].shift()).mean())
print("Mediana de crecimiento medio del número de casos confirmados en Cartagena: ",(df_Nuevo["Acum_confirmados"]/df_Nuevo["Acum_confirmados"].shift()).median())
print("Promedio de crecimiento medio del número de casos recuperados en Cartagena: ",(df_Nuevo["Acum_Recuperados"]/df_Nuevo["Acum_Recuperados"].shift()).mean())
print("Mediana de crecimiento medio del número de casos recuperados en Cartagena: ",(df_Nuevo["Acum_Recuperados"]/df_Nuevo["Acum_Recuperados"].shift()).median())
print("Promedio de crecimiento medio del número de casos de muerte en Cartagena: ",(df_Nuevo["Acum_muertos"]/df_Nuevo["Acum_muertos"].shift()).mean())
print("Mediana de crecimiento medio del número de casos de muerte en Cartagena: ",(df_Nuevo["Acum_muertos"]/df_Nuevo["Acum_muertos"].shift()).median())
fig=go.Figure()
fig.add_trace(go.Scatter(x=df_Nuevo.index, y=df_Nuevo["Acum_confirmados"]/df_Nuevo["Acum_confirmados"].shift(),
mode='lines',
name='Factor de crecimiento de los casos confirmados'))
fig.add_trace(go.Scatter(x=df_Nuevo.index, y=df_Nuevo["Acum_Recuperados"]/df_Nuevo["Acum_Recuperados"].shift(),
mode='lines',
name='Factor de crecimiento de los casos recuperados'))
fig.add_trace(go.Scatter(x=df_Nuevo.index, y=df_Nuevo["Acum_muertos"]/df_Nuevo["Acum_muertos"].shift(),
mode='lines',
name='Factor de crecimiento de los casos de muerte'))
fig.update_layout(title="Factor de crecimiento en función de la fecha de los diferentes tipos de casos en Cartagena",
xaxis_title="Fecha",yaxis_title="Factor de crecimiento",
legend=dict(x=0,y=-0.4,traceorder="normal"))
fig.show()
model_train=df_Nuevo.iloc[:int(df_Nuevo.shape[0]*0.96)]
valid=df_Nuevo.iloc[int(df_Nuevo.shape[0]*0.96):]
y_pred=valid.copy()
model_scores=[]
model_arima= auto_arima(model_train["Acum_confirmados"],trace=True, error_action='ignore', start_p=1,start_q=1,max_p=3,max_q=3,
suppress_warnings=True,stepwise=False,seasonal=False)
model_arima.fit(model_train["Acum_confirmados"])
prediction_arima=model_arima.predict(len(valid))
y_pred["ARIMA Model Prediction"]=prediction_arima
model_scores.append(np.sqrt(mean_squared_error(valid["Acum_confirmados"],prediction_arima)))
print("Error Cuadrático Medio Modelo ARIMA: ",np.sqrt(mean_squared_error(valid["Acum_confirmados"],prediction_arima)))
fig=go.Figure()
fig.add_trace(go.Scatter(x=model_train.index, y=model_train["Acum_confirmados"],
mode='lines+markers',name="Datos de entrenamiento para casos confirmados"))
fig.add_trace(go.Scatter(x=valid.index, y=valid["Acum_confirmados"],
mode='lines+markers',name="Datos de validación para datos confirmados",))
fig.add_trace(go.Scatter(x=valid.index, y=y_pred["ARIMA Model Prediction"],
mode='lines+markers',name="Predicción de casos confirmados",))
fig.update_layout(title="Predicción de casos confirmados con el modelo ARIMA de Cartagena",
xaxis_title="Fecha",yaxis_title="Acum_confirmados",legend=dict(x=0,y=1,traceorder="normal"))
fig.show()
new_date=[]
ARIMA_model_new_prediction=[]
for i in range(1,18):
new_date.append(df_Nuevo.index[-1]+timedelta(days=i))
ARIMA_model_new_prediction.append(model_arima.predict(len(valid)+i)[-1])
pd.DataFrame(zip(new_date,ARIMA_model_new_prediction),columns=["Confirmados","Predicción Modelo ARIMA"]).head()
prophet_c=Prophet(interval_width=0.75,weekly_seasonality=True,)
prophet_confirmed=pd.DataFrame(zip(list(df_Nuevo.index),list(df_Nuevo["Acum_confirmados"])),columns=['ds','y'])
prophet_c.fit(prophet_confirmed)
forecast_c=prophet_c.make_future_dataframe(periods=17)
forecast_confirmed=forecast_c.copy()
confirmed_forecast=prophet_c.predict(forecast_c)
model_scores.append(np.sqrt(mean_squared_error(df_Nuevo["Acum_confirmados"],confirmed_forecast['yhat'].head(df_Nuevo.shape[0]))))
print("Error Cuadrático Medio Modelo Prophet: ",np.sqrt(mean_squared_error(df_Nuevo["Acum_confirmados"],confirmed_forecast['yhat'].head(df_Nuevo.shape[0]))))
print(prophet_c.plot(confirmed_forecast))
print(prophet_c.plot_components(confirmed_forecast))
model_train=df_Nuevo.iloc[:int(df_Nuevo.shape[0]*0.96)]
valid=df_Nuevo.iloc[int(df_Nuevo.shape[0]*0.96):]
y_pred=valid.copy()
model_arima= auto_arima(model_train["Acum_muertos"],trace=True, error_action='ignore', start_p=1,start_q=1,max_p=3,max_q=3,
suppress_warnings=True,stepwise=False,seasonal=False)
model_arima.fit(model_train["Acum_muertos"])
prediction_arima=model_arima.predict(len(valid))
y_pred["ARIMA Model Prediction"]=prediction_arima
model_scores.append(np.sqrt(mean_squared_error(valid["Acum_muertos"],prediction_arima)))
print("Error Cuadrático Medio Modelo ARIMA: ",np.sqrt(mean_squared_error(valid["Acum_muertos"],prediction_arima)))
fig=go.Figure()
fig.add_trace(go.Scatter(x=model_train.index, y=model_train["Acum_muertos"],
mode='lines+markers',name="Datos de entrenamiento para casos fallecidos"))
fig.add_trace(go.Scatter(x=valid.index, y=valid["Acum_muertos"],
mode='lines+markers',name="Datos de validación para datos fallecidos",))
fig.add_trace(go.Scatter(x=valid.index, y=y_pred["ARIMA Model Prediction"],
mode='lines+markers',name="Predicción de casos fallecidos",))
fig.update_layout(title="Predicción de casos fallecidos con el modelo ARIMA de Cartagena",
xaxis_title="Fecha",yaxis_title="Acum_muertos",legend=dict(x=0,y=1,traceorder="normal"))
fig.show()
ARIMA_model_new_prediction=[]
for i in range(1,18):
ARIMA_model_new_prediction.append(model_arima.predict(len(valid)+i)[-1])
pd.DataFrame(zip(new_date,ARIMA_model_new_prediction),columns=["Fallecidos","Predicción Modelo ARIMA"]).head()
prophet_c=Prophet(interval_width=0.75,weekly_seasonality=True,)
prophet_confirmed=pd.DataFrame(zip(list(df_Nuevo.index),list(df_Nuevo["Acum_muertos"])),columns=['ds','y'])
prophet_c.fit(prophet_confirmed)
forecast_c=prophet_c.make_future_dataframe(periods=17)
forecast_confirmed=forecast_c.copy()
confirmed_forecast=prophet_c.predict(forecast_c)
model_scores.append(np.sqrt(mean_squared_error(df_Nuevo["Acum_muertos"],confirmed_forecast['yhat'].head(df_Nuevo.shape[0]))))
print("Error Cuadrático Medio Modelo Prophet: ",np.sqrt(mean_squared_error(df_Nuevo["Acum_muertos"],confirmed_forecast['yhat'].head(df_Nuevo.shape[0]))))
print(prophet_c.plot(confirmed_forecast))
print(prophet_c.plot_components(confirmed_forecast))
model_train=df_Nuevo.iloc[:int(df_Nuevo.shape[0]*0.96)]
valid=df_Nuevo.iloc[int(df_Nuevo.shape[0]*0.96):]
y_pred=valid.copy()
model_arima= auto_arima(model_train["Acum_Recuperados"],trace=True, error_action='ignore', start_p=1,start_q=1,max_p=3,max_q=3,
suppress_warnings=True,stepwise=False,seasonal=False)
model_arima.fit(model_train["Acum_Recuperados"])
prediction_arima=model_arima.predict(len(valid))
y_pred["ARIMA Model Prediction"]=prediction_arima
model_scores.append(np.sqrt(mean_squared_error(valid["Acum_Recuperados"],prediction_arima)))
print("Error Cuadrático Medio Modelo ARIMA: ",np.sqrt(mean_squared_error(valid["Acum_Recuperados"],prediction_arima)))
fig=go.Figure()
fig.add_trace(go.Scatter(x=model_train.index, y=model_train["Acum_Recuperados"],
mode='lines+markers',name="Datos de entrenamiento para casos recuperados"))
fig.add_trace(go.Scatter(x=valid.index, y=valid["Acum_Recuperados"],
mode='lines+markers',name="Datos de validación para datos recuperados",))
fig.add_trace(go.Scatter(x=valid.index, y=y_pred["ARIMA Model Prediction"],
mode='lines+markers',name="Predicción de casos recuperados",))
fig.update_layout(title="Predicción de casos recuperados con el modelo ARIMA de Cartagena",
xaxis_title="Fecha",yaxis_title="Acum_Recuperados",legend=dict(x=0,y=1,traceorder="normal"))
fig.show()
ARIMA_model_new_prediction=[]
for i in range(1,18):
ARIMA_model_new_prediction.append(model_arima.predict(len(valid)+i)[-1])
pd.DataFrame(zip(new_date,ARIMA_model_new_prediction),columns=["Recuperados","Predicción Modelo ARIMA"]).head()
prophet_c=Prophet(interval_width=0.75,weekly_seasonality=True,)
prophet_confirmed=pd.DataFrame(zip(list(df_Nuevo.index),list(df_Nuevo["Acum_Recuperados"])),columns=['ds','y'])
prophet_c.fit(prophet_confirmed)
forecast_c=prophet_c.make_future_dataframe(periods=17)
forecast_confirmed=forecast_c.copy()
confirmed_forecast=prophet_c.predict(forecast_c)
model_scores.append(np.sqrt(mean_squared_error(df_Nuevo["Acum_Recuperados"],confirmed_forecast['yhat'].head(df_Nuevo.shape[0]))))
print("Error Cuadrático Medio Modelo Prophet: ",np.sqrt(mean_squared_error(df_Nuevo["Acum_Recuperados"],confirmed_forecast['yhat'].head(df_Nuevo.shape[0]))))
print(prophet_c.plot(confirmed_forecast))
print(prophet_c.plot_components(confirmed_forecast))
model_train=df_Nuevo.iloc[:int(df_Nuevo.shape[0]*0.96)]
valid=df_Nuevo.iloc[int(df_Nuevo.shape[0]*0.96):]
y_pred=valid.copy()
model_arima= auto_arima(model_train["Acum_Activos"],trace=True, error_action='ignore', start_p=1,start_q=1,max_p=3,max_q=3,
suppress_warnings=True,stepwise=False,seasonal=False)
model_arima.fit(model_train["Acum_Activos"])
prediction_arima=model_arima.predict(len(valid))
y_pred["ARIMA Model Prediction"]=prediction_arima
model_scores.append(np.sqrt(mean_squared_error(valid["Acum_Activos"],prediction_arima)))
print("Error Cuadrático Medio Modelo ARIMA: ",np.sqrt(mean_squared_error(valid["Acum_Activos"],prediction_arima)))
fig=go.Figure()
fig.add_trace(go.Scatter(x=model_train.index, y=model_train["Acum_Activos"],
mode='lines+markers',name="Datos de entrenamiento para casos activos"))
fig.add_trace(go.Scatter(x=valid.index, y=valid["Acum_Activos"],
mode='lines+markers',name="Datos de validación para datos activos",))
fig.add_trace(go.Scatter(x=valid.index, y=y_pred["ARIMA Model Prediction"],
mode='lines+markers',name="Predicción de casos activos",))
fig.update_layout(title="Predicción de casos activos con el modelo ARIMA de Cartagena",
xaxis_title="Fecha",yaxis_title="Acum_muertos",legend=dict(x=0,y=1,traceorder="normal"))
fig.show()
ARIMA_model_new_prediction=[]
for i in range(1,18):
ARIMA_model_new_prediction.append(model_arima.predict(len(valid)+i)[-1])
pd.DataFrame(zip(new_date,ARIMA_model_new_prediction),columns=["Activos","Predicción Modelo ARIMA"]).head()
prophet_c=Prophet(interval_width=0.75,weekly_seasonality=True,)
prophet_confirmed=pd.DataFrame(zip(list(df_Nuevo.index),list(df_Nuevo["Acum_Activos"])),columns=['ds','y'])
prophet_c.fit(prophet_confirmed)
forecast_c=prophet_c.make_future_dataframe(periods=17)
forecast_confirmed=forecast_c.copy()
confirmed_forecast=prophet_c.predict(forecast_c)
model_scores.append(np.sqrt(mean_squared_error(df_Nuevo["Acum_Activos"],confirmed_forecast['yhat'].head(df_Nuevo.shape[0]))))
print("Error Cuadrático Medio Modelo Prophet: ",np.sqrt(mean_squared_error(df_Nuevo["Acum_Activos"],confirmed_forecast['yhat'].head(df_Nuevo.shape[0]))))
print(prophet_c.plot(confirmed_forecast))
print(prophet_c.plot_components(confirmed_forecast))